//
//  UIView+SGExtension.h
//  SGExtensionObjC
//
//  Created by xyanl on 2025/9/9.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIView (SGExtension)

#pragma mark - Frame
/// x
@property (nonatomic, assign) CGFloat sg_x;
/// y
@property (nonatomic, assign) CGFloat sg_y;
/// 宽度
@property (nonatomic, assign) CGFloat sg_width;
/// 高度
@property (nonatomic, assign) CGFloat sg_height;
/// centerX
@property (nonatomic, assign) CGFloat sg_centerX;
/// centerY
@property (nonatomic, assign) CGFloat sg_centerY;
/// size
@property (nonatomic, assign) CGSize  sg_size;
/// point
@property (nonatomic, assign) CGPoint sg_origin;
/// right
@property (nonatomic, assign) CGFloat sg_right;
/// bottom
@property (nonatomic, assign) CGFloat sg_bottom;

#pragma mark - 基础
/**
 * 从与当前类同名的 xib 文件加载视图
 *
 * @return 新创建的视图实例，如果加载失败则返回 nil
 */
+ (instancetype)sg_viewFromNib;

/**
 * 通过遍历响应者链，查找并返回当前视图所属的视图控制器。
 * 此方法利用UIResponder的nextResponder属性向上查找，直到找到UIViewController实例。
 *
 * @return 当前视图所属的视图控制器，如果未找到则返回nil。
 */
- (UIViewController *)sg_viewController;

/// 移除所有子视图
- (void)sg_removeAllSubviews;

/// view 转换成 图片
- (UIImage*)sg_snapshotImage;


#pragma mark - UIGestureRecognizer
/// 添加点击手势
/// - Parameters:
///   - target: target
///   - selector: selector
- (UITapGestureRecognizer *)sg_addTapGestureWithTarget:(id)target action:(nullable SEL)selector;

/// 添加长按手势
/// - Parameters:
///   - target: target
///   - selector: selector
- (UILongPressGestureRecognizer *)sg_addLongPressGestureWithTarget:(id)target action:(nullable SEL)selector;

/// 添加拖拽手势
/// - Parameters:
///   - target: target
///   - selector: selector
- (UIPanGestureRecognizer *)sg_addPanGestureWithTarget:(id)target action:(nullable SEL)selector;

#pragma mark - 圆角

/**
 * 为视图添加指定圆角
 * @param cornerRadius 圆角半径
 */
- (void)sg_addRoundedCornersRadius:(CGFloat)cornerRadius;

/**
 * 为视图添加指定圆角
 * @param corners 需要添加圆角的位置（可组合使用）
 * @param cornerRadii 圆角半径（宽度和高度）
 */
- (void)sg_addRoundedCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;

/**
 * 为视图添加指定圆角（指定frame）
 * @param corners 需要添加圆角的位置
 * @param cornerRadii 圆角半径
 * @param frame 应用圆角的frame
 */
- (void)sg_addRoundedCorners:(UIRectCorner)corners
                 cornerRadii:(CGSize)cornerRadii
                       frame:(CGRect)frame;

/**
 * 为视图添加指定圆角（带动画效果）
 * @param corners 圆角位置
 * @param cornerRadii 圆角半径
 * @param duration 动画时长
 */
- (void)sg_addRoundedCorners:(UIRectCorner)corners
                 cornerRadii:(CGSize)cornerRadii
           animationDuration:(NSTimeInterval)duration;

/**
 * 移除所有圆角效果
 */
- (void)sg_removeRoundedCorners;

/**
 * 检查是否已添加圆角
 */
- (BOOL)sg_hasRoundedCorners;

/// 为视图设置自定义圆角
/// - Parameters:
///   - topLeft: 左上角半径
///   - topRight: 右上角半径
///   - bottomLeft: 左下角半径
///   - bottomRight: 右下角半径
- (void)sg_addCornerRadiusWithTopLeft:(CGFloat)topLeft
                             topRight:(CGFloat)topRight
                           bottomLeft:(CGFloat)bottomLeft
                          bottomRight:(CGFloat)bottomRight;

#pragma mark - 边框

- (void)sg_addLayerRoundedCorners:(CGFloat)cornerRadius
                      borderWidth:(CGFloat)borderWidth
                      borderColor:(UIColor *)borderColor;

// 添加圆角和边框（支持动画）
- (void)sg_addLayerRoundedCorners:(CGFloat)cornerRadius
                      borderWidth:(CGFloat)borderWidth
                      borderColor:(UIColor *)borderColor
                        animation:(BOOL)animated
                         duration:(NSTimeInterval)duration;

// 移除圆角和边框
- (void)sg_removeLayerRoundedCorners;


@end

NS_ASSUME_NONNULL_END
